package cn.tedu.mall.order.listener;

import cn.tedu.mall.pojo.order.dto.OrderAddCondition;
import org.apache.rocketmq.spring.core.RocketMQLocalTransactionState;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * 所有实现类,都要在这个注册器中注册数据
 * 真正调用的实现,是通过策略条件在这个注册器中区分的
 */
@Component
public class OrderAddListenerRegister implements OrderAddListenerExecutorInter {
    private static Map<String, OrderAddListenerExecutorInter>
            register = new HashMap<>();

    /**
     * 客户端调用的方法
     *
     * @param orderAddCondition 有可能是seckillOrderAddDTO 有可能是orderAddDTO
     * @return
     */
    @Override
    public RocketMQLocalTransactionState execute(OrderAddCondition orderAddCondition) {
        String className = orderAddCondition.getClass().getName();
        return register.get(className).execute(orderAddCondition);
    }

    public static void registe(String key, OrderAddListenerExecutorInter orderAddListenerExecutorInter) {
        //谁声明bean,谁来注册到注册器,key值,策略条件两个类的全路径名称
        register.put(key, orderAddListenerExecutorInter);
    }
}
